spark WARN TaskSchedulerImpl: Initial job has not accepted any resources

在本地提交一个spark job,出现如下错误

1
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

在网上搜了一下,出现这种错误一般有两种原因,

  1. 内存不足。
  2. 主机名和IP配置不正确。

检查了一下,我只是跑一个简单的测试程序,内存是完全够用的,我也在spark web console上确认了内存是足够的。

为了确认主机名和IP的问题,我把SparkContext的内容打印了出来

1
2
3
4
5
6
spark.app.id=app-20150806145030-0003
spark.app.name=Simple Application
spark.cores.max=5
spark.driver.host=192.168.56.1
spark.driver.port=61685
……

这里显示我的IP是192.168.56.1,但实际上这是我的windows虚拟机的IP地址,而我本机的IP地址是192.168.100.151.

在提交spark job之后,server端需要反馈进度给driver host,所以反馈消息被发送到了虚拟机上而本机并没有收到,导致这个异常的发生。所以如果你的机器上装有虚拟机,在运行spark程序之前,最好用ifconfig down把虚拟机网卡关掉。